package pe.com.fastfood4.rie.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import pe.com.fastfood4.rie.model.DetalleReserva;
import pe.com.fastfood4.rie.model.Reserva;
import pe.com.fastfood4.rie.service.DetalleReservaService;
import pe.com.fastfood4.rie.service.ReservaService;

/**
 * SolicitarReservaController.java
 * es llamado desde solicitarReservaForm.jsp, envia los datos de la reserva y sus detalles (Platos)
 * a la base de datos para ser registrados y pasa el resultado (idReserva) a solicitarReservaResultado.jsp
 * @author grupo 06 - upc_dew 2010
 * @since 1.0
 * @see ifernandez.aq@gmail.com
 */
public class SolicitarReservaController implements Controller {

    private ReservaService reservaService;
    private DetalleReservaService detalleReservaService;

    public void setReservaService(ReservaService reservaService) {
        this.reservaService = reservaService;
    }

    public void setDetalleReservaService(DetalleReservaService detalleReservaService) {
        this.detalleReservaService = detalleReservaService;
    }

    protected final Log logger = LogFactory.getLog(getClass());

    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception {

        int cantidadPlato1 = Integer.valueOf(req.getParameter("cantidadPlato1"));
        int cantidadPlato2 = Integer.valueOf(req.getParameter("cantidadPlato2"));
        int cantidadPlato3 = Integer.valueOf(req.getParameter("cantidadPlato3"));
        int cantidadPlato4 = Integer.valueOf(req.getParameter("cantidadPlato4"));

        logger.info("cantidadPlato1: " + cantidadPlato1);
        logger.info("cantidadPlato2: " + cantidadPlato2);
        logger.info("cantidadPlato3: " + cantidadPlato3);
        logger.info("cantidadPlato4: " + cantidadPlato4);

        int ultimoIdDetalleReserva = detalleReservaService.getUltimoIdDetalleReserva();
        logger.info("ultimoIdDetalleReserva = " + ultimoIdDetalleReserva);
        int idDetalleReserva1 = ultimoIdDetalleReserva + 1;
        logger.info("idDetalleReserva1 = " + idDetalleReserva1);

        int idDetalleReserva2 = ultimoIdDetalleReserva + 2;
        logger.info("idDetalleReserva2 = " + idDetalleReserva2);

        int idDetalleReserva3 = ultimoIdDetalleReserva + 3;
        logger.info("idDetalleReserva3 = " + idDetalleReserva3);

        int idDetalleReserva4 = ultimoIdDetalleReserva + 4;
        logger.info("idDetalleReserva4 = " + idDetalleReserva4);

        int ultimoIdReserva = reservaService.getUltimoIdReserva();
        logger.info("ultimoIdReserva = " + ultimoIdReserva);
        int idReserva = ultimoIdReserva + 1;
        logger.info("idReserva = " + idReserva);

        String fecha = req.getParameter("fecha");
        String hora = req.getParameter("hora");
        String comentarios = req.getParameter("comentarios");
        int idCliente = Integer.valueOf(req.getParameter("idCliente"));

        logger.info("fecha: " + fecha);
        logger.info("hora: " + hora);
        logger.info("comentarios: " + comentarios);
        logger.info("idCliente: " + idCliente);

        if ( cantidadPlato1 != 0 ){
            int idPlato1 = 1;
            DetalleReserva detalleReserva = new DetalleReserva();
            detalleReserva.setIdDetalleReserva(idDetalleReserva1);
            detalleReserva.setIdPlato(idPlato1);
            detalleReserva.setCantidadPlatos(cantidadPlato1);
            this.reservaService.registrarDetalleReserva(detalleReserva);

            Reserva reserva = new Reserva();
            reserva.setIdReserva(idReserva);
            reserva.setFecha(fecha + " " + hora);
            reserva.setEstadoReserva("Solicitada");
            reserva.setComentarios(comentarios);
            reserva.setIdCliente(idCliente);
            reserva.setIdDetalleReserva(idDetalleReserva1);
            this.reservaService.registrarReserva(reserva);
        }

        if ( cantidadPlato2 != 0 ){
            int idPlato2 = 2;
            DetalleReserva detalleReserva = new DetalleReserva();
            detalleReserva.setIdDetalleReserva(idDetalleReserva2);
            detalleReserva.setIdPlato(idPlato2);
            detalleReserva.setCantidadPlatos(cantidadPlato2);
            this.reservaService.registrarDetalleReserva(detalleReserva);

            Reserva reserva = new Reserva();
            reserva.setIdReserva(idReserva);
            reserva.setFecha(fecha + " " + hora);
            reserva.setEstadoReserva("Solicitada");
            reserva.setComentarios(comentarios);
            reserva.setIdCliente(idCliente);
            reserva.setIdDetalleReserva(idDetalleReserva2);
            this.reservaService.registrarReserva(reserva);
        }

        if ( cantidadPlato3 != 0 ){
            int idPlato3 = 3;
            DetalleReserva detalleReserva = new DetalleReserva();
            detalleReserva.setIdDetalleReserva(idDetalleReserva3);
            detalleReserva.setIdPlato(idPlato3);
            detalleReserva.setCantidadPlatos(cantidadPlato3);
            this.reservaService.registrarDetalleReserva(detalleReserva);

            Reserva reserva = new Reserva();
            reserva.setIdReserva(idReserva);
            reserva.setFecha(fecha + " " + hora);
            reserva.setEstadoReserva("Solicitada");
            reserva.setComentarios(comentarios);
            reserva.setIdCliente(idCliente);
            reserva.setIdDetalleReserva(idDetalleReserva3);
            this.reservaService.registrarReserva(reserva);
        }

        if ( cantidadPlato4 != 0 ){
            int idPlato4 = 4;
            DetalleReserva detalleReserva = new DetalleReserva();
            detalleReserva.setIdDetalleReserva(idDetalleReserva4);
            detalleReserva.setIdPlato(idPlato4);
            detalleReserva.setCantidadPlatos(cantidadPlato4);
            this.reservaService.registrarDetalleReserva(detalleReserva);

            Reserva reserva = new Reserva();
            reserva.setIdReserva(idReserva);
            reserva.setFecha(fecha + " " + hora);
            reserva.setEstadoReserva("Solicitada");
            reserva.setComentarios(comentarios);
            reserva.setIdCliente(idCliente);
            reserva.setIdDetalleReserva(idDetalleReserva4);
            this.reservaService.registrarReserva(reserva);
        }

        return new ModelAndView("solicitarReservaResultado","idReserva", idReserva);
    }
}
